From: Georges Basile Stavracas Neto Date: Sat, 29 Jun 2019 04:32:40 +0000 (-0300) Subject: appIcon: End running drag operations on destroy X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~839^2^2~119 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=3db1058c2cc844629efea46de1fa2171ff8d09e8;p=gnome-shell.git appIcon: End running drag operations on destroy AppIcon makes itself draggable, and handles the various DnD routines such as 'drag-begin' and 'drag-end' by making the Overview emit the appropriate signals. However, when destroyed, the AppIcon does not try to finish any drag operations that started. That causes the event blocker in AllView not to be updated correctly when dragging icons to outside folders. Make AppIcon emit 'item-drag-end' when a drag operation started and it's destroyed. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/643 --- diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index c1b916a59..e7510a36c 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -1532,13 +1532,16 @@ var AppIcon = class AppIcon { if (isDraggable) { this._draggable = DND.makeDraggable(this.actor); this._draggable.connect('drag-begin', () => { + this._dragging = true; this._removeMenuTimeout(); Main.overview.beginItemDrag(this); }); this._draggable.connect('drag-cancelled', () => { + this._dragging = false; Main.overview.cancelledItemDrag(this); }); this._draggable.connect('drag-end', () => { + this._dragging = false; Main.overview.endItemDrag(this); }); } @@ -1555,6 +1558,10 @@ var AppIcon = class AppIcon { _onDestroy() { if (this._stateChangedId > 0) this.app.disconnect(this._stateChangedId); + if (this._draggable && this._dragging) { + Main.overview.endItemDrag(this); + this.draggable = null; + } this._stateChangedId = 0; this._removeMenuTimeout(); }